
package ia;

/**
 *
 * @author bruno.marinho
 */
public class Main {

    private static int geracao;
    private static Elemento mapa[][];

    public static int getGeracao() {
        return geracao;
    }

    public static void geracao() {
       geracao++;
    }
    /**
     * @param args the command line arguments
     */

public static void inicializaAleatorio(){
mapa=new Elemento[][]{
                    {new Elemento(Util.geraEspecie(), Util.geraSaude()),new Elemento(Util.geraEspecie(), Util.geraSaude()),new Elemento(Util.geraEspecie(), Util.geraSaude()),new Elemento(Util.geraEspecie(), Util.geraSaude()),new Elemento(Util.geraEspecie(), Util.geraSaude()),new Elemento(Util.geraEspecie(), Util.geraSaude()),new Elemento(Util.geraEspecie(), Util.geraSaude()),new Elemento(Util.geraEspecie(), Util.geraSaude()),new Elemento(Util.geraEspecie(), Util.geraSaude()),new Elemento(Util.geraEspecie(), Util.geraSaude())},
                    {new Elemento(Util.geraEspecie(), Util.geraSaude()),new Elemento(Util.geraEspecie(), Util.geraSaude()),new Elemento(Util.geraEspecie(), Util.geraSaude()),new Elemento(Util.geraEspecie(), Util.geraSaude()),new Elemento(Util.geraEspecie(), Util.geraSaude()),new Elemento(Util.geraEspecie(), Util.geraSaude()),new Elemento(Util.geraEspecie(), Util.geraSaude()),new Elemento(Util.geraEspecie(), Util.geraSaude()),new Elemento(Util.geraEspecie(), Util.geraSaude()),new Elemento(Util.geraEspecie(), Util.geraSaude())},
                    {new Elemento(Util.geraEspecie(), Util.geraSaude()),new Elemento(Util.geraEspecie(), Util.geraSaude()),new Elemento(Util.geraEspecie(), Util.geraSaude()),new Elemento(Util.geraEspecie(), Util.geraSaude()),new Elemento(Util.geraEspecie(), Util.geraSaude()),new Elemento(Util.geraEspecie(), Util.geraSaude()),new Elemento(Util.geraEspecie(), Util.geraSaude()),new Elemento(Util.geraEspecie(), Util.geraSaude()),new Elemento(Util.geraEspecie(), Util.geraSaude()),new Elemento(Util.geraEspecie(), Util.geraSaude())},
                    {new Elemento(Util.geraEspecie(), Util.geraSaude()),new Elemento(Util.geraEspecie(), Util.geraSaude()),new Elemento(Util.geraEspecie(), Util.geraSaude()),new Elemento(Util.geraEspecie(), Util.geraSaude()),new Elemento(Util.geraEspecie(), Util.geraSaude()),new Elemento(Util.geraEspecie(), Util.geraSaude()),new Elemento(Util.geraEspecie(), Util.geraSaude()),new Elemento(Util.geraEspecie(), Util.geraSaude()),new Elemento(Util.geraEspecie(), Util.geraSaude()),new Elemento(Util.geraEspecie(), Util.geraSaude())},
                    {new Elemento(Util.geraEspecie(), Util.geraSaude()),new Elemento(Util.geraEspecie(), Util.geraSaude()),new Elemento(Util.geraEspecie(), Util.geraSaude()),new Elemento(Util.geraEspecie(), Util.geraSaude()),new Elemento(Util.geraEspecie(), Util.geraSaude()),new Elemento(Util.geraEspecie(), Util.geraSaude()),new Elemento(Util.geraEspecie(), Util.geraSaude()),new Elemento(Util.geraEspecie(), Util.geraSaude()),new Elemento(Util.geraEspecie(), Util.geraSaude()),new Elemento(Util.geraEspecie(), Util.geraSaude())},
                    {new Elemento(Util.geraEspecie(), Util.geraSaude()),new Elemento(Util.geraEspecie(), Util.geraSaude()),new Elemento(Util.geraEspecie(), Util.geraSaude()),new Elemento(Util.geraEspecie(), Util.geraSaude()),new Elemento(Util.geraEspecie(), Util.geraSaude()),new Elemento(Util.geraEspecie(), Util.geraSaude()),new Elemento(Util.geraEspecie(), Util.geraSaude()),new Elemento(Util.geraEspecie(), Util.geraSaude()),new Elemento(Util.geraEspecie(), Util.geraSaude()),new Elemento(Util.geraEspecie(), Util.geraSaude())},
                    {new Elemento(Util.geraEspecie(), Util.geraSaude()),new Elemento(Util.geraEspecie(), Util.geraSaude()),new Elemento(Util.geraEspecie(), Util.geraSaude()),new Elemento(Util.geraEspecie(), Util.geraSaude()),new Elemento(Util.geraEspecie(), Util.geraSaude()),new Elemento(Util.geraEspecie(), Util.geraSaude()),new Elemento(Util.geraEspecie(), Util.geraSaude()),new Elemento(Util.geraEspecie(), Util.geraSaude()),new Elemento(Util.geraEspecie(), Util.geraSaude()),new Elemento(Util.geraEspecie(), Util.geraSaude())},
                    {new Elemento(Util.geraEspecie(), Util.geraSaude()),new Elemento(Util.geraEspecie(), Util.geraSaude()),new Elemento(Util.geraEspecie(), Util.geraSaude()),new Elemento(Util.geraEspecie(), Util.geraSaude()),new Elemento(Util.geraEspecie(), Util.geraSaude()),new Elemento(Util.geraEspecie(), Util.geraSaude()),new Elemento(Util.geraEspecie(), Util.geraSaude()),new Elemento(Util.geraEspecie(), Util.geraSaude()),new Elemento(Util.geraEspecie(), Util.geraSaude()),new Elemento(Util.geraEspecie(), Util.geraSaude())},
                    {new Elemento(Util.geraEspecie(), Util.geraSaude()),new Elemento(Util.geraEspecie(), Util.geraSaude()),new Elemento(Util.geraEspecie(), Util.geraSaude()),new Elemento(Util.geraEspecie(), Util.geraSaude()),new Elemento(Util.geraEspecie(), Util.geraSaude()),new Elemento(Util.geraEspecie(), Util.geraSaude()),new Elemento(Util.geraEspecie(), Util.geraSaude()),new Elemento(Util.geraEspecie(), Util.geraSaude()),new Elemento(Util.geraEspecie(), Util.geraSaude()),new Elemento(Util.geraEspecie(), Util.geraSaude())},
                    {new Elemento(Util.geraEspecie(), Util.geraSaude()),new Elemento(Util.geraEspecie(), Util.geraSaude()),new Elemento(Util.geraEspecie(), Util.geraSaude()),new Elemento(Util.geraEspecie(), Util.geraSaude()),new Elemento(Util.geraEspecie(), Util.geraSaude()),new Elemento(Util.geraEspecie(), Util.geraSaude()),new Elemento(Util.geraEspecie(), Util.geraSaude()),new Elemento(Util.geraEspecie(), Util.geraSaude()),new Elemento(Util.geraEspecie(), Util.geraSaude()),new Elemento(Util.geraEspecie(), Util.geraSaude())}
                };
Util.alimentacao=0;
Util.livre=0;
Util.nada=0;
Util.reproduz=0;
Util.movimentacao=0;
}

    public static void inicializaBase() {
        mapa = new Elemento[][]{
                    {new Elemento(1, Util.geraSaude()), new Elemento(0, 0), new Elemento(1, Util.geraSaude()), new Elemento(0, 0), new Elemento(1, Util.geraSaude()), new Elemento(0, 0), new Elemento(1, Util.geraSaude()), new Elemento(0, 0), new Elemento(1, Util.geraSaude()), new Elemento(0, 0)},
                    {new Elemento(1, Util.geraSaude()), new Elemento(0, 0), new Elemento(1, Util.geraSaude()), new Elemento(0, 0), new Elemento(1, Util.geraSaude()), new Elemento(0, 0), new Elemento(1, Util.geraSaude()), new Elemento(0, 0), new Elemento(1, Util.geraSaude()), new Elemento(0, 0)},
                    {new Elemento(1, Util.geraSaude()), new Elemento(0, 0), new Elemento(1, Util.geraSaude()), new Elemento(0, 0), new Elemento(1, Util.geraSaude()), new Elemento(0, 0), new Elemento(1, Util.geraSaude()), new Elemento(0, 0), new Elemento(1, Util.geraSaude()), new Elemento(0, 0)},
                    {new Elemento(1, Util.geraSaude()), new Elemento(0, 0), new Elemento(1, Util.geraSaude()), new Elemento(0, 0), new Elemento(1, Util.geraSaude()), new Elemento(0, 0), new Elemento(1, Util.geraSaude()), new Elemento(0, 0), new Elemento(1, Util.geraSaude()), new Elemento(0, 0)},
                    {new Elemento(1, Util.geraSaude()), new Elemento(0, 0), new Elemento(1, Util.geraSaude()), new Elemento(0, 0), new Elemento(1, Util.geraSaude()), new Elemento(0, 0), new Elemento(1, Util.geraSaude()), new Elemento(0, 0), new Elemento(1, Util.geraSaude()), new Elemento(0, 0)},
                    {new Elemento(1, Util.geraSaude()), new Elemento(0, 0), new Elemento(1, Util.geraSaude()), new Elemento(0, 0), new Elemento(1, Util.geraSaude()), new Elemento(0, 0), new Elemento(1, Util.geraSaude()), new Elemento(0, 0), new Elemento(1, Util.geraSaude()), new Elemento(0, 0)},
                    {new Elemento(1, Util.geraSaude()), new Elemento(0, 0), new Elemento(1, Util.geraSaude()), new Elemento(0, 0), new Elemento(1, Util.geraSaude()), new Elemento(0, 0), new Elemento(1, Util.geraSaude()), new Elemento(0, 0), new Elemento(1, Util.geraSaude()), new Elemento(0, 0)},
                    {new Elemento(1, Util.geraSaude()), new Elemento(0, 0), new Elemento(1, Util.geraSaude()), new Elemento(0, 0), new Elemento(1, Util.geraSaude()), new Elemento(0, 0), new Elemento(1, Util.geraSaude()), new Elemento(0, 0), new Elemento(1, Util.geraSaude()), new Elemento(0, 0)},
                    {new Elemento(1, Util.geraSaude()), new Elemento(0, 0), new Elemento(1, Util.geraSaude()), new Elemento(0, 0), new Elemento(1, Util.geraSaude()), new Elemento(0, 0), new Elemento(1, Util.geraSaude()), new Elemento(0, 0), new Elemento(1, Util.geraSaude()), new Elemento(0, 0)},
                    {new Elemento(1, Util.geraSaude()), new Elemento(0, 0), new Elemento(1, Util.geraSaude()), new Elemento(0, 0), new Elemento(1, Util.geraSaude()), new Elemento(0, 0), new Elemento(1, Util.geraSaude()), new Elemento(0, 0), new Elemento(1, Util.geraSaude()), new Elemento(0, 0)}
                };
        Util.alimentacao = 0;
        Util.livre = 0;
        Util.nada = 0;
        Util.reproduz = 0;
        Util.movimentacao = 0;
    }

    public static void main(String[] args) throws InterruptedException {

        

    

        
      Display d =new Display();

      d.setSize(1024, 500);
        d.setVisible(true);
        d.setTitle("JCiclo de Vida v0.2 by Diabo Loiro ");
      inicializaAleatorio();
      // inicializaBase();
      while(true){

     //  Thread.sleep(1000);
        geracao();
           d.inicializaLista(mapa);
        for (int i = 0; i < mapa.length; i++) {

            for (int j = 0; j < mapa[i].length; j++) {

             

                mapa[i][j].processa(i, j, mapa,d.isReproducao(),d.isSol());
             
              //  if(mapa[i][j].getEspecie()!=0){
                 d.negrito(Util.lista.get(new ObjCordenada(i, j)),i,j,d.isDetalhe());
              //  }
                     d.atualizaGrid(mapa,getGeracao());

                     //if(mapa[i][j].getEspecie()!=0){
                     // d.negrito(Util.lista.get(new ObjCordenada(i, j)));
                     //}else{
                   //  Thread.sleep(1000);
                  //   }
                   
                
             
            }
        }

        d.atualizaGrid(mapa,getGeracao());
        if(d.isReinicia()){
           // inicializaBase();
      inicializaAleatorio();
        }
        }

        

    }

}
